#include "disparo.h"

/*------------------------------------------------------------------------------
	Constructor
------------------------------------------------------------------------------*/
CDisparo::CDisparo()
{
	m_iDanio=0;	
	m_fVelocX=VELOCX_DISP;
	m_fVelocY=0;
	m_pPadre=NULL;
	m_pEfecto=NULL;
	m_aVectorRot[0]=0;
	m_aVectorRot[1]=0;
	m_aVectorRot[2]=0;
}

/*------------------------------------------------------------------------------
	Destructor
------------------------------------------------------------------------------*/
CDisparo::~CDisparo()
{
}

/*------------------------------------------------------------------------------
	Class initialization
------------------------------------------------------------------------------*/
CParticulas * CDisparo::Iniciar(	CRecursos 	*pRecursos,
						CEntidad 	*padre,						
						CEscenario 	*pEscenario,
						ETipoDisparo Tipo,
						float X,
						float Y,
						float Z)
{
	if(pRecursos==NULL || padre==NULL || pEscenario==NULL)
		return NULL;
		
	m_pRecursos=pRecursos;	
	m_pPadre=padre;
	setEscenario(pEscenario);

	setX(X);
	setY(Y);
	setZ(Z);
	setRotZ(m_pPadre->getRotZ());

	if(m_pPadre->getRotZ()==GRADOS_DERECHA)
		setVelocX(VELOCX_DISP);
	else
		setVelocX(-VELOCX_DISP);

	setEscalaX(ESCALA_DISP);
	setEscalaY(ESCALA_DISP);
	setEscalaZ(ESCALA_DISP);
	
	setColor(1,1,1);
		
	switch (Tipo)
	{
		case DISPARO_SHURIKEN:
			setModelo(m_pRecursos->getMd2Disparo(0));
			setRotX(60+(10*frand()));
			m_aVectorRot[2]=-7;			
		break;
		
		case DISPARO_KUNAI:
			setModelo(m_pRecursos->getMd2Disparo(1));
			m_aVectorRot[0]=10*frand();
			setEscalaX(ESCALA_DISP*0.75);
			setEscalaY(ESCALA_DISP*0.75);
			setEscalaZ(ESCALA_DISP*0.75);
		break;

		case DISPARO_SHURIKEN_FUEGO:
			setEscalaX(ESCALA_DISP*1.15);
			setEscalaY(ESCALA_DISP*1.15);
			setEscalaZ(ESCALA_DISP*1.15);
			setRotX(60+(10*frand()));
			setModelo(m_pRecursos->getMd2Disparo(0));
			m_aVectorRot[2]=-7;
			m_pEfecto=new CParticulas();
			m_pEfecto->setTextura(m_pRecursos->getTexturaParticula(0));
			m_pEfecto->Iniciar(25,PART_FUEGO,0.5,0,getX(),getY(),Z_DELANTE);
			m_pEfecto->setColor(0.25,0.05,0);
			m_pEfecto->setEscala(1.5);
			setColor(0.75,0.1,0.1);
		break;

		case DISPARO_KUNAI_FUEGO:
			setModelo(m_pRecursos->getMd2Disparo(1));
			m_aVectorRot[0]=10*frand();
			setEscalaX(ESCALA_DISP*0.75);
			setEscalaY(ESCALA_DISP*0.75);
			setEscalaZ(ESCALA_DISP*0.75);
			m_pEfecto=new CParticulas();
			m_pEfecto->setTextura(m_pRecursos->getTexturaParticula(0));
			m_pEfecto->Iniciar(25,PART_FUEGO,0.35,0,getX(),getY(),Z_DELANTE);
			m_pEfecto->setColor(0,0,1);
			m_pEfecto->setEscala(1.25);
			setColor(0.75,1,0.75);			
		break;
		
		default:
		break;
	}
	
	setDelineado(TRUE);
	
	return m_pEfecto;
}

/*------------------------------------------------------------------------------
	Free memory method
------------------------------------------------------------------------------*/
void CDisparo::Liberar()
{	
	if(m_pEfecto)		
		m_pEfecto->Liberar();
	
	m_pEfecto=NULL;	
	CEntidad::Liberar();
	m_pPadre=NULL;
}

/*------------------------------------------------------------------------------
	Draws the object
------------------------------------------------------------------------------*/
void CDisparo::Dibujar()
{
	if(!getVivo())
		return;
	
	CEntidad::Dibujar(0);	

	if(m_pEfecto)
	{
		m_pEfecto->setX(getX()+(CEntidad::getMaxX()*(m_fVelocX*40)));
		m_pEfecto->setY(getY());
//		m_pEfecto->setZ(getZ()-0.5);
		//m_pEfecto->Dibujar();
	}		

	setX(getX()+m_fVelocX);

	setRotX(getRotX()+m_aVectorRot[0]);
	setRotY(getRotY()+m_aVectorRot[1]);
	setRotZ(getRotZ()+m_aVectorRot[2]);

	
	int yc=getEscenario()->f2celdaY(getY());
	int xc=getEscenario()->f2celdaX(getX());	
	
	if(!CEntidad::DentroCamara() || getEscenario()->getCelda(yc,xc)!=-1/*getEscenario()->EsSuelo(xc,yc)*/)	
		setVivo(FALSE);
}

